# Copyright (c) 2008 Todd A. Fisher
# see LICENSE

module ESI
  module TagHandler
    def start_tag_handler( parser, router, cache, request_params, http_params, max_depth )
      parser.start_tag_handler do|tag_name, attrs|
        tag = ESI::Tag::Base.create( router,
                                     request_params,
                                     http_params,
                                     tag_name.gsub(/esi:/,''),
                                     attrs,
                                     cache )
        # set the tag depth
        tag.depth = parser.depth if tag.respond_to?(:depth=)
        tag.max_depth = max_depth if tag.respond_to?(:max_depth=)

        if parser.esi_tag
          parser.esi_tag.add_child(tag)
        else
          parser.esi_tag = tag
        end
      end
    end

    def end_tag_handler( parser )
      parser.end_tag_handler do|tag_name|
        #ct = Time.now
        if parser.esi_tag.name == tag_name.gsub(/esi:/,'')
          parser.esi_tag.close(parser.output)
          parser.esi_tag = nil
        else
          parser.esi_tag.close_child(parser.output,tag_name)
        end
        #puts "\t[#{tag_name}] Time to close: #{Time.now - ct}"
      end
    end


  end
end
